home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Amiga
/
World of Amiga.iso
/
archive
/
assembly
/
awesome.lha
/
demo.s
< prev
next >
Wrap
Text File
|
1993-01-16
|
18KB
|
654 lines
incdir "DevpacAm:include/"
include "exec/exec_lib.i"
include "exec/execbase.i"
include "graphics/gfxbase.i"
include "graphics/graphics_lib.i"
include "hardware/custom.i"
***********************************************************
* Other Macros
***********************************************************
CALL MACRO
jsr _LVO\1(a6)
ENDM
WaitBlit MACRO
tst.b (a5)
.\@: btst.b #6,(a5)
bne.b .\@
ENDM
***********************************************************
Start: bsr.w TakeSystem
bsr.w InstallBmap
bsr.w InstallSprites
bsr.w InstallCopper
move.w #$7fff,intena-2(a5)
movea.l VectorBase,a0
move.l $6c(a0),Level3Save
move.l #MyLevel3,$6c(a0)
move.w #$c020,intena-2(a5)
.1: btst #6,$bfe001
bne.b .1
move.w #$7fff,intena-2(a5)
movea.l VectorBase,a0
move.l Level3Save,$6c(a0)
bsr.w RestoreSystem
rts
***********************************************************
MyLevel3: movem.l d0-a6,-(a7) ; Push all regs onto stack
movea.l #$dff002,a5 ; Custom chip base
bsr.w VScroll
bsr.w MoveStars
move.w #$20,intreq-2(a5) ; Turn off VBLANK int request bit
movem.l (a7)+,d0-a6 ; Pop all regs from stack
rte ; End of interrupt
***********************************************************
VScroll: subq.w #1,VScrollCount ; 1 less line to move up
tst.w VScrollCount ; Are we ready to draw a new text line?
beq.w NewLine ; Yes, go do it
; If not, we need to shift it up
WB: WaitBlit
move.l #Bmap+24+40,$50-2(a5) ; Blitter source A (y = 1)
move.l #Bmap+24,$54-2(a5) ; Blitter destination D (y = 0)
move.l #$00180018,$64-2(a5) ; A & D modulos
move.l #-1,$44-2(a5) ; Write mask
move.l #$09f00000,$40-2(a5) ; Blitter Control registers
move.w #(198*64)+8,$58-2(a5) ; 198 lines by 8 words
rts
***********************************************************
NewLine: move.w #11,VScrollCount ; Reset VScroll counter
lea ScrollText,a2 ; Adr of scrolltext
add.l ScrollPos,a2 ; Get to correct place in text
add.l #15,ScrollPos ; Next time, we want the next line
tst.b (a2) ; Does this line start with a 0 byte?
bne.b NoResetText ; No, go on as normal
move.l #15,ScrollPos ; Yes, restart text
lea ScrollText,a2 ; Point back to start
NoResetText: moveq #0,d6 ; Counter, will do 15 characters
FindChar: lea Font,a0 ; Adr of font
lea Bmap,a1 ; Adr of bitmap
moveq #0,d0 ; Clear out d0
move.b (a2)+,d0 ; Next char into d0
sub.b #32,d0 ; Get range of 0-58
cmp.b #37,d0 ; Is it lower than an 'H'?
blt.s FirstRow ; Yes, use the top row of the font
add.l #(40*9),a0 ; No, use the second row of the font
sub.b #37,d0 ; and adjust the range
FirstRow: add.l d0,a0 ; Add char offset into font bmap
add.l d6,a1 ; Add char num offset into bmap
add.l #7544,a1 ; Move to lower right of bmap
moveq #7,d7 ; We will copy this many raster lines
DrawLoop: move.b (a0),(a1) ; Copy a line of the character
add.l #40,a0 ; Next line in font bmap
add.l #40,a1 ; Next line in target bmap
dbra d7,DrawLoop ; Repeat until whole character is done
addq.l #1,d6 ; Next character
cmpi.l #15,d6 ; Done all 15 in this line yet?
bne.w FindChar ; No, do it all again
bra.w WB
rts ; Done
***********************************************************
MoveStars: lea Stars+1,a0
moveq #32,d0 ; num of stars div 3
loop: subq.b #3,(a0)+
addq.l #7,a0
subq.b #2,(a0)+
addq.l #7,a0
subq.b #1,(a0)+
addq.l #7,a0
subq.l #1,d0
bne.s loop
rts
***********************************************************
InstallSprites: lea SpritePtrs,a0
move.l #Stars,d0
move.w d0,6(a0)
swap d0
move.w d0,2(a0)
move.l #NullSprite,d0
move.w d0,14(a0)
move.w d0,22(a0)
move.w d0,30(a0)
move.w d0,38(a0)
move.w d0,46(a0)
move.w d0,54(a0)
move.w d0,62(a0)
swap d0
move.w d0,10(a0)
move.w d0,18(a0)
move.w d0,26(a0)
move.w d0,34(a0)
move.w d0,42(a0)
move.w d0,50(a0)
move.w d0,58(a0)
rts
***********************************************************
TakeSystem: movea.l 4.w,a6 ; exec base
lea $dff002,a5 ; custom chip base + 2
lea GraphicsName,a1 ; "graphics.library"
moveq #0,d0 ; any version
CALL OpenLibrary ; open it.
move.l d0,gfx_base ; save pointer to gfx base
move.l d0,a6 ; for later callls...
move.l gb_ActiView(a6),OldView ; save old view
move.w #0,a1 ; clears full long-word
CALL LoadView ; Open a NULL view (resets display
; on any Amiga)
CALL WaitTOF ; Wait twice so that an interlace
CALL WaitTOF ; display can reset.
CALL OwnBlitter ; take over the blitter and...
CALL WaitBlit ; wait for it to finish so we
; safely use it as we please.
movea.l 4.w,a6 ; exec base
CALL Forbid ; kill multitasking
move.w $7c-2(a5),d0 ; AGA register...
cmpi.b #$f8,d0 ; are we AGA?
bne.b .not_aga ; nope.
move.w #0,$dff1fc ; reset AGA sprites to normal mode
.not_aga: bsr.b GetVBR ; get the vector base pointer
move.l d0,VectorBase ; save it for later.
move.w dmaconr-2(a5),d0 ; old DMACON bits
ori.w #$8000,d0 ; or it set bit for restore
move.w d0,OldDMACon ; save it
move.w intenar-2(a5),d0 ; old DMACON bits
ori.w #$c000,d0 ; or it set bit for restore
move.w d0,OldINTEna ; save it
rts
***********************************************************
RestoreSystem: lea $dff002,a5 ; custom chip base + 2
move.w OldDMACon,dmacon-2(a5) ; restore old dma bits
move.w OldINTEna,intena-2(a5) ; restore old int bits
movea.l OldView,a1 ; old Work Bench view
movea.l gfx_base,a6 ; gfx base
CALL LoadView ; Restore the view
CALL DisownBlitter ; give blitter back to the system.
move.l gb_copinit(a6),$80-2(a5) ; restore system clist
movea.l a6,a1
movea.l 4.w,a6 ; exec base
CALL CloseLibrary
CALL Permit ; restart multitasking
rts
***********************************************************
* This function provides a method of obtaining a pointer to the base of the
* interrupt vector table on all Amigas. After getting this pointer, use
* the vector address as an offset. For example, to install a level three
* interrupt you would do the following:
*
* bsr _GetVBR
* move.l d0,a0
* move.l $6c(a0),OldIntSave
* move.l #MyIntCode,$6c(a0)
*
***********************************************************
* Inputs: none
* Output: d0 contains vbr.
GetVBR: move.l a5,-(sp) ; save it.
moveq #0,d0 ; clear
movea.l 4.w,a6 ; exec base
btst.b #AFB_68010,AttnFlags+1(a6); are we at least a 68010?
beq.b .1 ; nope.
lea.l vbr_exception(pc),a5 ; addr of function to get VBR
CALL Supervisor ; supervisor state
.1: move.l (sp)+,a5 ; restore it.
rts ; return
vbr_exception:
; movec vbr,Xn is a priv. instr. You must be supervisor to execute!
; movec vbr,d0
; many assemblers don't know the VBR, if yours doesn't, then use this
; line instead.
dc.w $4e7a,$0801
rte ; back to user state code
***********************************************************
InstallCopper: move.l #Copper,$80-2(a5) ; Install my copperlist
rts ; Done
***********************************************************
InstallBmap: lea BmapPtrs,a0 ; Bmap ptrs in copperlist
move.l #Bmap,d0 ; Address of bitplane 1
move.w d0,6(a0) ; write lower half
swap d0 ; switch words
move.w d0,2(a0) ; write upper half
move.l #Bmap+8000,d0 ; Address of bitplane 2
move.w d0,14(a0) ; write lower half
swap d0 ; switch words
move.w d0,10(a0) ; write upper half
move.l #Bmap+16000,d0 ; Address of bitplane 3
move.w d0,22(a0) ; write lower half
swap d0 ; switch words
move.w d0,18(a0) ; write upper half
move.l #Bmap+24000,d0 ; Address of bitplane 4
move.w d0,30(a0) ; write lower half
swap d0 ; switch words
move.w d0,26(a0) ; write upper half
rts ; Done
***********************************************************
section DemoText,DATA
GraphicsName: GRAFNAME ; name of gfx library
EVEN
ScrollText: dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' A '
dc.b ' '
dc.b ' LONG '
dc.b ' '
dc.b ' TIME '
dc.b ' '
dc.b ' AGO, '
dc.b ' '
dc.b ' IN '
dc.b ' '
dc.b ' A '
dc.b ' '
dc.b ' GALAXY '
dc.b ' '
dc.b ' FAR, '
dc.b ' '
dc.b ' FAR '
dc.b ' '
dc.b ' AWAY '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'IS WHERE THIS '
dc.b 'DEMO BELONGS!! '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'WELL ANYWAY, '
dc.b ' '
dc.b 'THIS IS VISION '
dc.b ' '
dc.b 'OF EPSILON '
dc.b ' '
dc.b 'PRESENTING HIS '
dc.b ' '
dc.b 'NEW, EXCITING '
dc.b ' '
dc.b '"AWESOME" DEMO!'
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'AS YOU CAN '
dc.b ' '
dc.b 'PROBABLY TELL, '
dc.b ' '
dc.b "IT'S NOT CALLED"
dc.b ' '
dc.b 'THAT BECAUSE IT'
dc.b ' '
dc.b 'IS ADVANCED... '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'BUT BECAUSE THE'
dc.b ' '
dc.b 'GRAPHICS '
dc.b ' '
dc.b 'WERE RIPPED '
dc.b ' '
dc.b 'FROM THE GAME '
dc.b ' '
dc.b '"AWESOME." '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'PRETTY CHEAP, '
dc.b 'HUH? '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 'TEXT RESTARTS..'
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b ' '
dc.b 0
EVEN
VScrollCount: dc.w 11
***********************************************************
section DemoData,DATA_c
NullSprite: dc.l 0,0,0,0
incdir ''
Bmap: incbin 'df1:awesome.raw'
Font: incbin 'df1:mahoneyfont.raw'
Copper: dc.w $0100,$4200,$0102,$0000,$0104,$0000,$0108,$0000,$010a,$0000
dc.w $008e,$2d81,$0090,$f4c1,$0092,$0038,$0094,$00d0,$0180,$0000
dc.w $0182,$0eff,$0184,$0cee,$0186,$09cc,$0188,$08bb,$018a,$069a
dc.w $018c,$0689,$018e,$0578,$0190,$0567,$0192,$0456,$0194,$0445
dc.w $0196,$0334,$0198,$0233,$019a,$0122,$019c,$0111,$019e,$0000
dc.w $01a2,$0444,$01a4,$0fff,$01a6,$0888
BmapPtrs:
dc.w $00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000,$00e8,$0000
dc.w $00ea,$0000,$00ec,$0000,$00ee,$0000
SpritePtrs:
dc.w $0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000,$0128,$0000
dc.w $012a,$0000,$012c,$0000,$012e,$0000,$0130,$0000,$0132,$0000
dc.w $0134,$0000,$0136,$0000,$0138,$0000,$013a,$0000,$013c,$0000
dc.w $013e,$0000
dc.w $2c0f,$fffe,$0182,$0000
dc.w $2d0f,$fffe,$0182,$0011
dc.w $2e0f,$fffe,$0182,$0122
dc.w $2f0f,$fffe,$0182,$0233
dc.w $300f,$fffe,$0182,$0344
dc.w $310f,$fffe,$0182,$0455
dc.w $320f,$fffe,$0182,$0566
dc.w $330f,$fffe,$0182,$0677
dc.w $340f,$fffe,$0182,$0788
dc.w $350f,$fffe,$0182,$0899
dc.w $360f,$fffe,$0182,$09aa
dc.w $370f,$fffe,$0182,$0abb
dc.w $380f,$fffe,$0182,$0bcc
dc.w $390f,$fffe,$0182,$0cdd
dc.w $3a0f,$fffe,$0182,$0dee
dc.w $3b0f,$fffe,$0182,$0eff
dc.w $d00f,$fffe,$0182,$0eff,$d08f,$fffe,$0182,$0eff
dc.w $d10f,$fffe,$0182,$0eff,$d18f,$fffe,$0182,$0dee
dc.w $d20f,$fffe,$0182,$0eff,$d28f,$fffe,$0182,$0cdd
dc.w $d30f,$fffe,$0182,$0eff,$d38f,$fffe,$0182,$0bcc
dc.w $d40f,$fffe,$0182,$0eff,$d48f,$fffe,$0182,$0abb
dc.w $d50f,$fffe,$0182,$0eff,$d58f,$fffe,$0182,$09aa
dc.w $d60f,$fffe,$0182,$0eff,$d68f,$fffe,$0182,$0899
dc.w $d70f,$fffe,$0182,$0eff,$d78f,$fffe,$0182,$0788
dc.w $d80f,$fffe,$0182,$0eff,$d88f,$fffe,$0182,$0677
dc.w $d90f,$fffe,$0182,$0eff,$d98f,$fffe,$0182,$0566
dc.w $da0f,$fffe,$0182,$0eff,$da8f,$fffe,$0182,$0455
dc.w $db0f,$fffe,$0182,$0eff,$db8f,$fffe,$0182,$0344
dc.w $dc0f,$fffe,$0182,$0eff,$dc8f,$fffe,$0182,$0233
dc.w $dd0f,$fffe,$0182,$0eff,$dd8f,$fffe,$0182,$0122
dc.w $de0f,$fffe,$0182,$0eff,$de8f,$fffe,$0182,$0011
dc.w $df0f,$fffe,$0182,$0eff,$df8f,$fffe,$0182,$0000
dc.w $e00f,$fffe,$0182,$0eff,$e08f,$fffe,$0182,$0000
dc.w $e10f,$fffe,$0182,$0eff,$e18f,$fffe,$0182,$0000
dc.w $e20f,$fffe,$0182,$0eff,$e28f,$fffe,$0182,$0000
dc.w $e30f,$fffe,$0182,$0eff,$e38f,$fffe,$0182,$0000
dc.w $e40f,$fffe,$0182,$0eff,$e48f,$fffe,$0182,$0000
dc.w $e50f,$fffe,$0182,$0eff,$e58f,$fffe,$0182,$0000
dc.w $e60f,$fffe,$0182,$0eff,$e68f,$fffe,$0182,$0000
dc.w $e70f,$fffe,$0182,$0eff,$e78f,$fffe,$0182,$0000
dc.w $e80f,$fffe,$0182,$0eff,$e88f,$fffe,$0182,$0000
dc.w $ffff,$fffe
Stars: dc.w $2c40,$2d00
dc.w $0000,$0001 ; a star on line one
dc.w $2e50,$2f00
dc.w $0001,$0001 ; a star on line two
dc.w $3080,$3100
dc.w $0001,$0000
dc.w $3284,$3300
dc.w $0000,$0001
dc.w $34a2,$3500
dc.w $0001,$0001
dc.w $36d3,$3700
dc.w $0001,$0000
dc.w $3898,$3900
dc.w $0000,$0001
dc.w $40ff,$4100
dc.w $0001,$0001
dc.w $4266,$4300
dc.w $0001,$0000
dc.w $4443,$4500
dc.w $0000,$0001
dc.w $46ef,$4700
dc.w $0001,$0001
dc.w $484b,$4900
dc.w $0001,$0000
dc.w $4aa8,$4b00
dc.w $0000,$0001
dc.w $4cd6,$4d00
dc.w $0001,$0001
dc.w $4ea5,$4f00
dc.w $0001,$0000
dc.w $503c,$5100
dc.w $0000,$0001
dc.w $5243,$5300
dc.w $0001,$0001
dc.w $5400,$5500
dc.w $0001,$0000 ; 6
dc.w $5684,$5700
dc.w $0000,$0001
dc.w $5894,$5900
dc.w $0001,$0001
dc.w $5a33,$5b00
dc.w $0001,$0000 ; 7
dc.w $5ca3,$5d00
dc.w $0000,$0001
dc.w $5e35,$5f00
dc.w $0001,$0001
dc.w $6006,$6100
dc.w $0001,$0000 ; 8
dc.w $6254,$6300
dc.w $0000,$0001
dc.w $6409,$6500
dc.w $0001,$0001
dc.w $66ab,$6700
dc.w $0001,$0000 ; 9
dc.w $6887,$6900
dc.w $0000,$0001
dc.w $6a97,$6b00
dc.w $0001,$0001
dc.w $6cfa,$6d00
dc.w $0001,$0000 ; 10
dc.w $6e03,$6f00
dc.w $0000,$0001
dc.w $7023,$7100
dc.w $0001,$0001
dc.w $7257,$7300
dc.w $0001,$0000 ; 11
dc.w $74dc,$7500
dc.w $0000,$0001
dc.w $76a7,$7700
dc.w $0001,$0001
dc.w $789a,$7900
dc.w $0001,$0000 ; 12
dc.w $7a03,$7b00
dc.w $0000,$0001
dc.w $7c06,$7d00
dc.w $0001,$0001
dc.w $7eab,$7f00
dc.w $0001,$0000 ; 13
dc.w $80dc,$8100
dc.w $0000,$0001
dc.w $82a7,$8300
dc.w $0001,$0001
dc.w $84df,$8500
dc.w $0001,$0000 ; 14
dc.w $8623,$8700
dc.w $0000,$0001
dc.w $8898,$8900
dc.w $0001,$0001
dc.w $8aab,$8b00
dc.w $0001,$0000 ; 15
dc.w $8c87,$8d00
dc.w $0000,$0001
dc.w $8edc,$8f00
dc.w $0001,$0001
dc.w $9013,$9100
dc.w $0001,$0000 ; 16
dc.w $9200,$9300
dc.w $0000,$0001
dc.w $9434,$9500
dc.w $0001,$0001
dc.w $9687,$9700
dc.w $0001,$0000 ; 17
dc.w $9854,$9900
dc.w $0000,$0001
dc.w $9ac0,$9b00
dc.w $0001,$0001
dc.w $9c12,$9d00
dc.w $0001,$0000 ; 18
dc.w $9e8f,$9f00
dc.w $0000,$0001
dc.w $a03c,$a100
dc.w $0001,$0001
dc.w $a254,$a300
dc.w $0001,$0000 ; 19
dc.w $a434,$a500
dc.w $0000,$0001
dc.w $a6bd,$a700
dc.w $0001,$0001
dc.w $a8ff,$a900
dc.w $0001,$0000 ; 20
dc.w $aaaf,$ab00
dc.w $0000,$0001
dc.w $ac3c,$ad00
dc.w $0001,$0001
dc.w $ae24,$af00
dc.w $0001,$0000 ; 21
dc.w $b034,$b100
dc.w $0000,$0001
dc.w $b27c,$b300
dc.w $0001,$0001
dc.w $b4d6,$b500
dc.w $0001,$0000 ; 22
dc.w $b678,$b700
dc.w $0000,$0001
dc.w $b803,$b900
dc.w $0001,$0001
dc.w $bade,$bb00
dc.w $0001,$0000 ; 23
dc.w $bc22,$bd00
dc.w $0000,$0001
dc.w $be34,$bf00
dc.w $0001,$0001
dc.w $c02a,$c100
dc.w $0001,$0000 ; 24
dc.w $c24a,$c300
dc.w $0000,$0001
dc.w $c466,$c500
dc.w $0001,$0001
dc.w $c633,$c700
dc.w $0001,$0000 ; 25
dc.w $c888,$c900
dc.w $0000,$0001
dc.w $ca21,$cb00
dc.w $0001,$0001
dc.w $cc78,$cd00
dc.w $0001,$0000 ; 26
dc.w $ce12,$cf00
dc.w $0000,$0001
dc.w $d045,$d100
dc.w $0001,$0001
dc.w $d2da,$d300
dc.w $0001,$0000 ; 27
dc.w $d447,$d500
dc.w $0000,$0001
dc.w $d698,$d700
dc.w $0001,$0001
dc.w $d840,$d900
dc.w $0001,$0000 ; 28
dc.w $dad0,$db00
dc.w $0000,$0001
dc.w $dcc0,$dd00
dc.w $0001,$0001
dc.w $de30,$df00
dc.w $0001,$0000 ; 29
dc.w $e023,$e100
dc.w $0000,$0001
dc.w $e220,$e300
dc.w $0001,$0001
dc.w $e45d,$e500
dc.w $0001,$0000 ; 30
dc.w $e668,$e700
dc.w $0000,$0001
dc.w $e842,$e900
dc.w $0001,$0001
dc.w $eaac,$eb00
dc.w $0001,$0000 ; 31
dc.w $ecec,$ed00
dc.w $0000,$0001
dc.w $eefa,$ef00
dc.w $0001,$0001
dc.w $f078,$f100
dc.w $0001,$0000 ; 32
dc.w $0000,$0000
***********************************************************
section DemoBSS,BSS
Level3Save: ds.l 1
gfx_base ds.l 1 ; pointer to graphics base
OldView ds.l 1 ; old Work Bench view addr.
VectorBase: ds.l 1 ; pointer to the Vector Base
OldDMACon: ds.w 1 ; old dmacon bits
OldINTEna: ds.w 1 ; old intena bits
ScrollPos: ds.l 1